package ltd.trackan.messagecenter.send;

import com.alibaba.fastjson2.JSONObject;
import lombok.extern.slf4j.Slf4j;
import ltd.trackan.messagecenter.common.ValueCommon;
import ltd.trackan.messagecenter.model.entity.EmailModel;
import ltd.trackan.messagecenter.utils.SendMailMessageUtils;
import ltd.trackan.messagecenter.utils.SendPushPlusMessageUtils;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 * 发送控制类
 *
 * @author wxa
 */
@Component
@Slf4j
public class SendController {
    @Resource
    SendMailMessageUtils sendMailMessageUtils;
    @Resource
    SendPushPlusMessageUtils sendPushPlusMessageUtils;
    @Resource
    JDPropertyIs jdPropertyIs;
    
    public void start() {
        if (ValueCommon.JD_CHANNEL_MAP.isEmpty()) {
            log.error("没有配置发送通道");
            return;
        }
        // 没有需要发送的消息
        if (ValueCommon.SEND_INFO_MAP.isEmpty()) {
            log.info("没有需要发送的消息");
            return;
        }
        // 发送的标题和发送的《账号，内容》
        ValueCommon.SEND_INFO_MAP.forEach((title, content) -> {
            for (Map.Entry<String, String> next : content.entrySet()) {
                String account = next.getKey();
                String sendValue = next.getValue();
                // 根据账号获取id
                String id = ValueCommon.JD_ACCOUNT_MAPPER_ID.get(account);
                if (id == null) {
                    log.error("没有找到账号{}的id", account);
                    continue;
                }
                HashMap<String, String> channel = ValueCommon.JD_CHANNEL_MAP.get(id);
                if (channel == null) {
                    log.info("该账号的{}的id{}没有渠道", account, id);
                    continue;
                }
                String sendTitle = title;
                // 如果是资产处理一下
                if ("京东资产统计".equals(title)) {
                    String temp = jdPropertyIs.send(sendValue);
                    if (temp == null) {
                        continue;
                    } else {
                        sendTitle = temp;
                    }
                }
                
                // 标题
                sendTitle = "备注("+ValueCommon.JD_ID_MAPPER_COMMENT.get(id) + " )-" + sendTitle;
                
                // 底部内容
                StringBuilder sb = new StringBuilder(sendValue);
                sb.append("<br><br>现在'京东资产统计'中【京豆】>=2000或【话费积分】>=11.0才会通知");
                sb.append("<br>'(旧/新)版东东农场-收获水果/忘记种植水果'会通知");
                sb.append("<br>'凭证过期'会通知");
                sb.append("<br>为此详细信息将会用网站来显示：");
                sb.append("<br>https://v4gvjne6kzj8.guyubao.com/");
                // 开始发送消息
                try {
                    String o = channel.get("pushplus");
                    if (o != null) {
                        JSONObject jsonObject = JSONObject.parseObject(o);
                        String token = jsonObject.getString("token");
                        sendPushPlusMessageUtils.send(token, sendTitle, sb.toString());
                    } else if ((o = channel.get("mail")) != null) {
                        JSONObject jsonObject = JSONObject.parseObject(o);
                        sendMailMessageUtils.sendEmailAsSysExceptionHtml(
                                new EmailModel(jsonObject.getString("receiverEmailAddress"),
                                        sendTitle, sb.toString()));
                    } else {
                        log.warn("该id{}没有渠道", id);
                    }
                } catch (Exception e) {
                    // 只有转换错误才会发生
                    log.error("该id：{}的发送过程中出现错误，消息：{}", id, e.getMessage());
                }
            }
        });
        ValueCommon.SEND_INFO_MAP.clear();
    }
}
